encrypt-api 接口加解密使用
版本要求
| 环境组件 | 版本 | 备注 |
|---|
| 架构 | 微服务 | |
| PigX | 5.7+ | |
| JDK | 17 | 分支:jdk17 |
整体流程
flowchart LR
A[前端业务代码调用 request] --> B
subgraph FE[前端统一处理:request.ts]
B[请求拦截器统一加密请求]
C[响应拦截器统一解密响应]
end
subgraph BE[后端common-encrypt-api]
D[Filter / RequestBodyAdvice<br/>统一接入]
E[ApiCryptoUtil.decryptData<br/>统一解密]
F[Controller / Service<br/>按明文处理业务]
G[ApiEncryptResponseBodyAdvice<br/>统一加密响应]
H[ApiCryptoUtil.encryptData<br/>统一加密]
end
B --> D --> E --> F --> G --> H --> C --> I[页面拿到解密后的结果]
快速上手
添加依赖
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pigx-common-encrypt-api</artifactId>
</dependency>
配置加解密密钥
在 nacos/application-dev.yml 配置文件中进行配置,对所有的微服务有效。
⚠密钥要求
aes-key 必须为 16 位,当前版本暂只支持 AES 加密算法。
security:
api:
encrypt:
enable: true # 开启请求加解密
aes-key: 1234567812345678 # 注意必须为 16 位,当前版本暂只支持 AES
PigX 前端处理
配置加密参数
找到前端根目录的 .env 文件,开启加解密配置:
VITE_PWD_ENC_KEY=加密密钥 # 16 位,注意和后端保持一致
VITE_API_ENC_ENABLED=true # 开启加解密功能 (没有需新增)
特殊场景:跳过加解密
在某些特殊场景下,如文件上传、下载或包含特殊字符的请求中,可能需要跳过加密处理。
后端跳过加解密
PigX 提供了 @NoEncrypt 注解来实现跳过加密处理功能,该注解可以应用在 Controller 方法上,用于标识该接口不需要进行加密/解密处理。
@NoEncrypt
@GetMapping("/local/file/{fileName}")
public void localFile(@PathVariable String fileName, HttpServletResponse response) {
ClassPathResource resource = new ClassPathResource("file/" + fileName);
response.setContentType("application/octet-stream; charset=UTF-8");
IoUtil.copy(resource.getInputStream(), response.getOutputStream());
}
前端跳过加解密
在请求头中设置 Enc-Flag: false 来跳过加解密:
request({
url: "xxx",
headers: {
"Enc-Flag": "false", // 通过指定 Enc-Flag: false 跳过加解密
},
method: "get",
params: { xxx },
});